package com.skyd.core.game.td;

import com.skyd.core.vector.Vector2DF;
import com.skyd.core.vector.VectorRect2DF;

public abstract class TDEntity implements ITDEntity {
	
	public TDEntity(){
		setPosition(new Vector2DF());
	}

	@Override 
	public float getX() {return _Position.getX();}
	
	@Override 
	public float getY() {return _Position.getY();}
	
	@Override
	public VectorRect2DF getAreaRect(){
		Vector2DF s = getSize();
		float w = s.getX();
		float h = s.getY();
		return new VectorRect2DF(getX(), getY(), getX()+w, getY()+h);
	}

	@Override
	public float getWidth() {
		return getSize().getX();
	}
	
	@Override
	public float getHeight() {
		return getSize().getY();
	}
	
	@Override
	public Vector2DF getCenterPosion() {
		return getPosition().plus(getSize().scale(0.5f));
	}

	/**
	 * 初始值为null。 功能注释：位置
	 */
	private Vector2DF _Position = null;

	/**
	 * 获取Position。 功能注释：位置
	 * 
	 * @return 当前的Vector2DF类型的值
	 */
	public Vector2DF getPosition() {
		return _Position.getClone();
	}

	/**
	 * 设置Position。 功能注释：位置
	 * 
	 * @param value
	 *            要设置的Vector2DF类型值
	 */
	public void setPosition(Vector2DF value) {
		_Position = value;
	}

	/**
	 * 设置Position为其默认值(null)。 功能注释：位置
	 */
	public void setPositionToDefault() {
		setPosition(null);
	}

	/**
	 * 获取当前世界的时间
	 * @return 时间
	 */
	public long getCurrentTime(){
		return TDWorld.getInstance().getTime();
	}
	
	/**
	 * 计算目标是否位于给定区域内
	 * @param target 目标
	 * @param area 区域
	 * @return 是否位于其内
	 */
	protected boolean calculationsIsInArea(ITDActor target, VectorRect2DF area) {
		Vector2DF p = target.getPosition();
		return p.isIn(area)||p.plus(new Vector2DF().setLength(target.getRadius()).setAngle(p.angleBetween(getCenterPosion()))).isIn(area);
	}
}
